java hibernate一对多出错,外键错误
我有两张桌子,订单和订单。他们之间的关系是一对多的。订购商品。fk_orders是外键。命令。ID是主键
我首先保存订单,然后保存订单项,但保存订单项。fk_订单与订单不同。ID和订单项。fk_顺序值很长(例如“3213148”,但正常值为“425618”),该问题只是偶尔出现
Orders.hbm.xml as below:
....
<id name="id" column="ID" type="java.lang.Long">
<generator class="native">
</generator>
</id>
<set name="orderProduct" lazy="false" cascade="all"
sort="unsorted">
<key column="FK_ORDERS"></key>
<one-to-many
class="com.arvato.ecommerce.model.base.OrderItems"/>
</set>
....
OrderItem.hbm.xml as below:
....
<id name="id" column="ID" type="java.lang.Long">
<generator class="native">
</generator>
</id>
<many-to-one name="orders"
class="com.arvato.ecommerce.model.base.Orders" cascade="none"
outer-join="auto" update="true" insert="true" lazy="false"
column="FK_ORDERS"/>
....
The code as below:
//save order
Orders orders = new Orders();
....
....
orders.setOrderItems(null);//(I think it is strange I don't know why set the null value to OrderItems?)
session = getSession();
session.save(object);
session.flush()
//save order items
....
Collection orderItems = orders.getOrderItems();
if (orderItems != null) {
OrderItem orderItem;
for (Iterator itemIterator = orderItems.iterator(); itemIterator.hasNext(); orderdao.insertOrderProduct(orderItem)) {
orderItem = (OrderItem) itemIterator.next();
orderItem.setOrders(orders);
}
}
....
public int insertOrderProduct(OrderItem orderItem)
throws DaoException {
Session session =null;
try {
session = getSession();
session.save(orderItem);
session.flush();
return 1;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
# 1 楼答案
您的映射似乎是正确的,但您使用它的方式是错误的。 由于您使用
cascade="all"
,因此Orders
实例中列出的所有OrderItems
将在保存Orders
实例时自动持久化下面的代码应该足够了:
其中addItem方法如下所示: